package com.gowants.pems.config;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.AccessControlFilter;
import org.json.JSONObject;

import java.io.PrintWriter;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class BeamUserFilter extends AccessControlFilter {

    /**
     *
     * 表示是否允许访问；mappedValue就是[urls]配置中拦截器参数部分，如果允许访问返回true，否则false；
     * (感觉这里应该是对白名单（不需要登录的接口）放行的)
     * 如果isAccessAllowed返回true则onAccessDenied方法不会继续执行
     * 这里可以用来判断一些不被通过的链接（个人备注）
     * * 表示是否允许访问 ，如果允许访问返回true，否则false；
     * @param request
     * @param response
     * @param mappedValue 表示写在拦截器中括号里面的字符串 mappedValue 就是 [urls] 配置中拦截器参数部分
     * @return
     * @throws Exception
     * */
    @Override
    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {

    	 Subject subject = SecurityUtils.getSubject();
//    	 long timeout = SecurityUtils.getSubject().getSession().getTimeout();
//    	 System.out.println(timeout+"毫秒");
         if(null != subject){
             if(subject.isRemembered()){
                 return true;
             }
             if(subject.isAuthenticated()){
                 return true;
             }
         }

         return false;
    }

    /**
     * 表示当访问拒绝时是否已经处理了；如果返回true表示需要继续处理；如果返回false表示该拦截器实例已经处理了，将直接返回即可。
     * onAccessDenied是否执行取决于isAccessAllowed的值，如果返回true则onAccessDenied不会执行；如果返回false，执行onAccessDenied
     * 如果onAccessDenied也返回false，则直接返回，不会进入请求的方法（只有isAccessAllowed和onAccessDenied的情况下）
     * */
    @Override
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
//    	String id = WebUtils.toHttp(request).getHeader("");
//    	if (!StringUtils.isEmpty(id)) {
    	 response.setCharacterEncoding("UTF-8");
         response.setContentType("application/json");
         PrintWriter writer = response.getWriter();
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("status", "666");
         jsonObject.put("err_code", "1000004");
         jsonObject.put("resultMsg", "登录失效，请重新登录");
         writer.print(jsonObject);
         return false ;
//    	}
//    	else {
//    		String successUrl = "/login.html";
//            WebUtils.getAndClearSavedRequest(request);
//            WebUtils.issueRedirect(request,response,successUrl);
//    		return false;
//    	}

    }
}